// 修改ExcelSheet.java，添加布局方向参数
package com.example.dev_demo.excel.exports;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * Excel Sheet模型类
 * 用于描述一个Sheet的完整信息
 */
@Data
public class ExcelSheet {
    /**
     * 布局方向枚举
     */
    public enum LayoutDirection {
        // 传统布局：表头在顶部
        TOP_HEADER,
        // 左侧布局：表头在左侧
        LEFT_HEADER
    }

    /**
     * Sheet名称
     */
    private String sheetName;

    /**
     * 表头信息列表
     */
    private List<ExcelHeader> headers = new ArrayList<>();

    /**
     * 数据列表
     * 可以是List<Map<String, Object>>或List<JavaBean>
     */
    private List<?> dataList = new ArrayList<>();

    /**
     * 表头行数(顶部布局)或列数(左侧布局)
     */
    private int headerCount = 1;

    /**
     * 是否是大数据量Sheet
     * 大数据量Sheet会使用SXSSFWorkbook的特性来优化内存
     */
    private boolean largeData = false;

    /**
     * 大数据量模式下，内存中保留的行数
     */
    private int rowAccessWindowSize = 100;

    /**
     * 布局方向
     */
    private LayoutDirection layoutDirection = LayoutDirection.TOP_HEADER;

    public ExcelSheet(String sheetName) {
        this.sheetName = sheetName;
    }

    public ExcelSheet(String sheetName, List<ExcelHeader> headers, List<?> dataList) {
        this.sheetName = sheetName;
        this.headers = headers;
        this.dataList = dataList;
    }

    public ExcelSheet(String sheetName, LayoutDirection layoutDirection) {
        this.sheetName = sheetName;
        this.layoutDirection = layoutDirection;
    }

    /**
     * 添加表头信息
     */
    public void addHeader(ExcelHeader header) {
        this.headers.add(header);
        // 根据布局方向更新表头计数
        if (layoutDirection == LayoutDirection.TOP_HEADER) {
            // 顶部布局：表头行数
            if (header.getRowIndex() + 1 > this.headerCount) {
                this.headerCount = header.getRowIndex() + 1;
            }
        } else {
            // 左侧布局：表头列数
            if (header.getColumnIndex() + 1 > this.headerCount) {
                this.headerCount = header.getColumnIndex() + 1;
            }
        }
    }
}